package com.example;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 任务信息表
 *
 * @author liuzhize 2024/10/17 15:52
 */
@Getter
@Setter
@ToString
@TableName("job_info")
public class JobInfo extends Model<JobInfo> {

  @TableId(value = "id")
  private Long id;

  /** 创建时间 */
  @TableField(fill = FieldFill.INSERT)
  private LocalDateTime createTime;

  /** 修改时间 */
  @TableField(fill = FieldFill.INSERT_UPDATE)
  private LocalDateTime updateTime;

  /** 指标集ID */
  private String metricsId;

  /** 指标集版本 */
  private String metricsVersion;

  /** 工作流原始id集合 */
  private String workFlowIds;

  /** 任务类型：同步，异步 */
  private JobType jobType;

  /** 数据类型：发票、税务、工商等 */
  private DataType dataType;

  /** 输入完整参数 */
  private String inputParam;

  /** 任务受理节点ip (jobFlowManager) */
  private String receiveNodeIp;

  /** 发票数量 */
  private Integer invoiceNum;

  /** 任务状态 */
  private Status status;

  /** 耗时（毫秒） */
  private Integer times;

  /** 数据类型 */
  public enum DataType {
    INVOICE("发票"),
    TAX("税务"),
    TAX_INVOICE("财税与发票"),
    INDUSTRY_COMMERCE("工商");

    private final String message;

    DataType(String message) {
      this.message = message;
    }

    public String getCode() {
      return name();
    }

    public String getMessage() {
      return message;
    }
  }

  /** 任务类型：同步，异步 */
  public enum JobType {
    ASYNC("异步"),
    SYNC("同步");

    private final String message;

    JobType(String message) {
      this.message = message;
    }

    public String getCode() {
      return name();
    }

    public String getMessage() {
      return message;
    }
  }

  /** 任务状态 */
  public enum Status {
    RECEIVER_SUCCESS("任务受理成功"),
    RECEIVER_FAIL("任务受理失败"),
    IN_QUEUE("任务排队中"),
    IN_PROCESS("加工中"),
    SUCCESS("计算成功"),
    FAIL("计算失败"),
    INTERRUPT("中断"),
    ;

    private final String message;

    Status(String message) {
      this.message = message;
    }

    public String getCode() {
      return name();
    }

    public String getMessage() {
      return message;
    }
  }
}
